from uiautomator2 import Device
import uiautomator2 as u2
import time
import random

'''
操作一般有2种方法：
    1. 使用像素点操作，局限性在于每台手机或者每个版本的UI位置不同
    2. 使用UI图标路径操作，适用性更好
'''


# 下滑
def down_glide():
    d.swipe(500, 1000, 500, 100)


# 退出评论区
def quit_comments_area():
    d.click(0.548, 0.114)
    time.sleep(2)


# 打开评论区，并发送666
def open_comments_666():
    # 打开评论区
    d(resourceId="com.ss.android.ugc.aweme:id/dbh").click()
    # 点击输入框
    time.sleep(0.4)
    d.click(0.129, 0.912)
    # 打开数字键盘
    time.sleep(0.7)
    d.click(0.203, 0.905)
    # 点击 666
    time.sleep(0.3)
    d.click(0.716, 0.763)
    d.click(0.716, 0.763)
    d.click(0.716, 0.763)
    # 点击发送
    time.sleep(0.56)
    d(resourceId="com.ss.android.ugc.aweme:id/ddf").click()


# 打开评论区，发送3颗红心
def open_comments_3heart():
    # 打开评论区
    time.sleep(0.26)
    d(resourceId="com.ss.android.ugc.aweme:id/dbh").click()
    # 点击输入框
    time.sleep(0.39)
    d.click(0.129, 0.912)
    # 点击发送3个红心（第一个表情）
    time.sleep(1)
    d.click(0.088, 0.568)
    d.click(0.088, 0.568)
    d.click(0.088, 0.568)
    # 发送
    time.sleep(0.56)
    d(resourceId="com.ss.android.ugc.aweme:id/ddf").click()


# 发送 "作品不错+红心"
def open_comments_good_work():
    # 打开评论区
    time.sleep(0.7)
    d(resourceId="com.ss.android.ugc.aweme:id/dbh").click()
    # 点击输入框
    time.sleep(0.89)
    d.click(0.129, 0.912)
    # 发送 "作品不错+红心"，即：zuopin bucuo 第一个表情
    time.sleep(0.23)
    d.click(0.898, 0.464)
    d.click(0.209, 0.837)
    d.click(0.644, 0.695)
    d.click(0.837, 0.693)
    d.click(0.939, 0.693)
    d.click(0.743, 0.695)
    d.click(0.691, 0.837)
    d.click(0.085, 0.624)
    d.click(0.597, 0.836)
    d.click(0.647, 0.696)
    d.click(0.404, 0.837)
    d.click(0.644, 0.693)
    d.click(0.84, 0.692)
    d.click(0.085, 0.628)
    d.click(0.088, 0.568)
    # 发送
    time.sleep(0.56)
    d(resourceId="com.ss.android.ugc.aweme:id/ddf").click()


# 浏览评论区,打开评论区下滑
def open_comments_down_glide():
    d(resourceId="com.ss.android.ugc.aweme:id/dbh").click()
    down_glide()


# 点赞视频
def like():
    d.xpath('//*[@resource-id="com.ss.android.ugc.aweme:id/ewq"]/android.widget.ImageView[1]').click()


# 关注作者
def attention():
    if d(resourceId="com.ss.android.ugc.aweme:id/hld").exists:
        d(resourceId="com.ss.android.ugc.aweme:id/hld").click()
        print("关注成功")
    else:
        print("已经关注")


if __name__ == '__main__':
    try:
        d = u2.connect()
        print('连接信息：', d.info)

        # 连接设备，可以使用cmd命令adb devices 查看
        d = Device('dda69f49')

        # 启动抖音应用，
        # 抖音设置了权限，如果无法打开可以手动打开再运行，或者打开 ”抖音极速版“
        d.app_start("com.ss.android.ugc.aweme")  # 打开抖音
        # d.app_start("com.ss.android.ugc.aweme.lite")  # 打开抖音极速版

        # 判断是否已经进入抖音视频界面
        while True:
            is_pass_into = d.xpath('//*[@resource-id="com.ss.android.ugc.aweme:id/p11"]/android.view.View[1]').exists
            print("已经进入抖音视频界面")
            if is_pass_into:
                break

        for i in range(1, 16):
            # 接下来使用线程随机阻塞秒数来模仿人的行为,也就是在一个视频上停留的时间
            a = random.uniform(1, 38)
            print(f'第{i}次停留：{a}s')
            time.sleep(a)

            # 一般不会对每条视频都操作，可以随机操作
            b = random.randrange(1, 181)
            print(f'b的值是:{b}   ')
            if 1 <= b <= 6:
                print('关注作者...')
                attention()
            elif 12 <= b <= 42:
                print('点赞...')
                like()
            elif 58 <= b <= 68:
                print('点赞并评论666...')
                # 点赞、评论666、退出评论区
                like()
                time.sleep(0.32)
                open_comments_666()
                time.sleep(0.1)
                quit_comments_area()
            elif 69 <= b <= 82:
                print('评论3颗红心...')
                # 评论3颗红心、下滑看评论区、退出评论区
                open_comments_3heart()
                time.sleep(1)
                down_glide()
                time.sleep(0.56)
                quit_comments_area()
            elif 88 <= b <= 100:
                print('评论作品不错...')
                open_comments_good_work()
                time.sleep(0.75)
                quit_comments_area()

            time.sleep(a / 10)
            # 下滑下一条视频
            down_glide()

    except RuntimeError as e:
        print(e)

    except Exception as e:
        print(e)
